/* Copyright (c) 2004-2022 peigen.info. All rights reserved. */

package info.peigen.hotpot.common.core.util;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;

/**
 * <b>(IdUtil)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2021/4/13
 */
public class IdUtil {

    /**
     * 默认24位
     *
     * @return String
     */
    public static String id() {
        return genId("0001");
    }

    /**
     * 全局唯一订单号，必须全局唯一，总长度24
     * 生成格式：<br/>
     * 日期时分秒（14）+分区键（2）+随机数（4）+生成顺序（2）
     * <p>
     * 例如：<br/>
     * yyyyMMddHHmmss+88+1234+01
     *
     * @return String
     */
    public static String gid() {
        return genId("9999");
    }

    /**
     * @param postStr 后缀
     *
     * @return String
     */
    public static String genId(String postStr) {
        return genId("88", postStr);
    }

    /**
     * @param abbreviation partner标识
     *
     * @return String
     */
    public static String genRequestNo(String abbreviation) {
        return DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_PATTERN) + abbreviation + RandomUtil.randomNumbers(4);
    }

    /**
     * @param region  分区
     * @param postStr 后缀
     *
     * @return String
     */
    public static String genId(String region, String postStr) {
        return DateUtil.format(DateUtil.date(), DatePattern.PURE_DATETIME_PATTERN) + region + RandomUtil.randomNumbers(4) + postStr;
    }

    public static String nextId(String nowId) {
        return NumberUtil.toStr(NumberUtil.add(nowId, "1"));
    }

    public static String nextId(String nowId, int size) {
        return NumberUtil.toStr(NumberUtil.add(nowId, String.valueOf(size)));
    }
}